了解虛擬化與容器化之間的差異可以提高組織的可擴展性并降低運營成本。在本文中,我們將討論這兩種創建虛擬包的方法之間的具體差異,以及這兩種有價值的解決方案之間的一般差異。
關于服務器虛擬化的討論不可避免地圍繞VMware、Hyper-V以及在較小程度上還圍繞 Xen 和 KVM 展開。但另一個重要的內容是Docker。
如果我們談論 Docker,我們就是在談論容器化——這與基于管理程序的服務器虛擬化有點不同。但是將應用程序封裝在具有操作環境的容器中可以獲得將應用程序加載到虛擬機上的許多好處:兩者都可以放在任何合適的物理機上并運行,而無需擔心依賴關系。
Docker 與 VMware
當然,Docker 和 VMware 之間的一個關鍵實際區別在于 Docker 是一個基于 Linux 的系統,它利用了LXC,一個用于 Linux 內核包含特性的用戶空間接口。
LXC 的目標是創建一個盡可能接近標準 Linux 安裝的環境,但不需要單獨的內核。正如 linuxcontainers.org 網站所說:“LXC 容器通常被認為介于 chroot 和成熟的虛擬機之間。”
因為 Docker 是建立在 LXC 之上的,所以它只能在 Linux 環境中運行,并且只能運行 Linux 應用程序。因此,您可以忘記在 Windows 或任何其他可以愉快地在傳統虛擬機管理程序上運行的操作系統上運行的應用程序。
另一個關鍵區別是,Docker 容器不是一個獨立的系統,而是與運行主機的操作系統共享它使用的 Linux 內核。它還與也在主機上運行的其他容器共享內核。操作系統的共享部分是只讀的,而每個容器都有自己的寫入掛載。
容器化的好處
那么容器化與成熟的服務器虛擬化相比有什么好處呢?你什么時候會使用一個而不是另一個?
容器化的主要好處之一是,您通常可以在主機上打包比在虛擬機上更多的容器。這是有道理的,因為每個虛擬機本身就是一個獨立的系統,擁有自己的操作系統和虛擬化硬件,以及分配給它的獨特資源。如果每個 VM 的大小為 10Gb,那么 10 個 VM 將占用 10×10 = 100Gb 的資源。
但是使用一個 10Gb 的容器并運行其中的 10 個,甚至 100 個,您將不會使用任何接近 100Gb 的資源。這是由于所有正在發生的共享。
實際上,所有容器只共享一個操作系統(嚴格來說是一個內核)。而且沒有虛擬化硬件——只有容器中的一個小應用程序和操作環境。這意味著您可以在主機上運行比運行成熟的虛擬機更多的容器。
共享內核和其他資源還有一個附加效果,那就是容器可以在不到一秒的時間內啟動。VM 的情況并非如此,VM 需要完整的虛擬系統啟動,并且可能需要更長的時間才能啟動。
Canonical(Ubuntu 的贊助商)的負責人 Mark Shuttleworth 重申,速度是一個額外的好處。“Canonical 支持關鍵內核和用戶空間工作,使您可以創建行為就像 VM 一樣的容器——你在其中有 root——即使你只是系統上的普通非 root 用戶。比 KVM 更快更輕,”他說。
還有其他好處。例如,您可以在 AWS 和 Azure 公共云上運行 Docker 容器,并且容器易于共享。這對測試和開發團隊特別有用——這是 Docker 最常被提及的潛在受益者之一。
容器化還不能替代成熟的服務器虛擬化
但對 VMware 和其他公司來說,好消息是容器化并不能替代成熟的基于管理程序的服務器虛擬化——至少現在還不能。
這是因為這個虛擬化世界被極其復雜的管理基礎架構所包圍,它允許您存儲、啟動和運行虛擬機,在主機之間實時遷移它們,創建高可用性集群等等。VMware 的 vCenter、Microsoft 的 System Center Virtual Machine Manager 和其他第三方管理產品等產品經過多年的發展。
盡管 Google、Red Hat、CoreOS、IBM 和微軟都在開發開源Kubernetes Docker 管理系統,但目前還沒有 Docker 可比的東西,該系統已迅速發展成為企業 IT 的主要工具。
這一切都意味著 Docker 虛擬化技術在未來絕對值得關注。